perm filename SAITHR.FAI[S,AIL]2 blob
sn#191965 filedate 1975-12-15 generic text, type T, neo UTF8
SEARCH HDRFIL
COMPIL(THR,<INOUT>,<SIMIO,SAVE,RESTR,GETCHN>
,<THROUGH I/O ROUTINE>)
HERE (INOUT)
PUSHJ P,SAVE ;SAVE AC'S,GET GOGTAB
MOVE LPSA,[XWD 6,6]
MOVE CHNL,-2(P) ;OUTPUT CH NUMBER
LOADI7 A,<INOUT (OUTPUT SIDE)>
PUSHJ P,GETCHN
SETZM @ENDFL(CDB) ;CLEAR ERROR INDICATOR
LDB TEMP,[POINT 4,DMODE(CDB),35] ;CHECK MODE
CMU <
MOVEI Z,1
CAIN TEMP,3 ;IS THE MODE 3
TRZA Z,-1 ; YES!!!
CAIN TEMP,4 ;OR CMU IMAGE MODE?
JRST .+4 ;UGLY, BE CAREFUL OF CODE CHANGES!
>;CMU
CAIL TEMP,10 ;MUST BE BINARY MODE
CAILE TEMP,14 ;AND NOT DUMP MODE
ERR <INOUT (OUTPUT SIDE): ILLEGAL DATA MODE:>,6
PUSH P,CDB ;SAVE -
PUSH P,CHNL ;WELL DO IT AGAIN
MOVE CHNL,-5(P) ;SEE...
LOADI7 A,<INOUT (INPUT SIDE)>
PUSHJ P,GETCHN ;DO YOUR THING
SETZM @ENDFL(CDB) ;CLEAR ERROR INDICATOR
LDB TEMP,[POINT 4,DMODE(CDB),35]
CMU <
MOVEI Y,1
CAIN TEMP,3 ;IS THE MODE 3
TRZA Y,-1 ;YES!!!
CAIN TEMP,4 ;OR CMU IMAGE MODE
JRST .+4 ;CAREFUL OF RELATIVE JUMPS!
>;CMU
CAIL TEMP,10
CAILE TEMP,14
ERR <INOUT (INPUT SIDE): ILLEGAL DATA MODE:>,6
SKIPGE B,-3(P) ;# OF WORDS
HRLOI B,377777 ;ARBITRARILY LARGE NUMBER OF WDS
TH1: JUMPE B,RESTR ;NO MORE TO DO
SKIPG E,ICOWNT(CDB) ;#OF WORDS IN BUFFER
JRST TH5 ;BETTER GET SOME MORE
CMU <
CAIN Y,0 ;IMP MODE?
LSH E,-2 ;DIVIDE BY 4 TO GET WORD COUNT
>;CMU
IBP IBP(CDB) ;MAKE SURE POINT TRIGHT
HRL C,IBP(CDB) ;INPUT POINTER
EXCH CHNL,(P) ;NOW FREEN OUTPUT STUFF
EXCH CDB,-1(P)
SKIPG OCOWNT(CDB) ;SOME LEFT
XCT IOOUT,SIMIO
SKIPA
JRST THERR
IBP OBP(CDB)
HRR C,OBP(CDB) ;OUTPUT POINTER
CAML E,B ;FIND # OF WORDS
MOVE E,B ;TO BLIT
NOCMU <
CAML E,OCOWNT(CDB) ;=MIN(B,ICOWNT,OCOWNT)
MOVE E,OCOWNT(CDB)
>;NOCMU
CMU <
CAMGE E,OCOWNT(CDB) ;=MIN(B,ICOWNT,OCOWNT)
JRST .+4
MOVE E,OCOWNT(CDB)
CAIN Z,0 ;IMP MODE?
LSH E,-2 ;DIVIDE BYTE COUNT BY 4
>;CMU
MOVEI D,(C) ;MAKE BLT TERMINATOR
ADDI D,-1(E) ;FINAL ADDRESS
BLT C,(D) ;CHOMP CHOMP
SUB B,E ;WE'VE DONE THESE
MOVEI A,-1(E) ;TO UPDATE BYTE POINTER
ADDM A,OBP(CDB) ;TOLD YOU SO
CMU <
CAIE Z,0 ;IMP MODE?
JRST .+3
LSH E,2 ;MULTIPLY BY 4 FOR BYTE COUNT
DPB Z,[POINT 6,OBP(CDB),5]
>;CMU
SUBM E,OCOWNT(CDB) ;UPDATE WORD COUNT
MOVNS OCOWNT(CDB) ;CLEVER,EH?
TH6: EXCH CHNL,(P) ;BACK TO INPUT SETUP
EXCH CDB,-1(P)
ADDM A,IBP(CDB) ;UPDATE INPUT PTR
CMU <
CAIE Y,0 ;IMP MODE?
JRST .+3
LSH E,2 ;MULTIPLY BY 4 FOR BYTE COUNT
DPB Y,[POINT 6,IBP(CDB),5]
>;CMU
SUBM E,ICOWNT(CDB) ;UPDATE WORD COUNT
MOVNS ICOWNT(CDB) ;SUBTRACTION WAS BACKWARDS
JRST TH1 ;MORE OF SAME
TH5: XCT IOIN,SIMIO ;DO SOME INPUT
JRST TH1 ;NOW GO PLAY
THERR: SKIPGE TEMP,-3(P) ;# THE GUY WANTED
HRLOI TEMP,377777 ;IT WAS A FUDGE
SUB TEMP,B ;SUBTRACT #LEFT TO GET
HRRM TEMP,@ENDFL(CDB);#HE GOT
JRST RESTR
ENDCOM(THR)
END